"""
参数化实现：方式3： 将 [(),(),()] 数据通过函数返回值传出，给 expand()
实现步骤：
1. 导包。 from parameterized import parameterized
2. 在 “测试方法” 的上一行，添加 “装饰器” 调用 expand() 方法
   - 语法：`@parameterized.expand()`
3. 给 expand() 传入 [(), (), ()] 格式 的 测试数据。
4. 修改 测试方法的 形参列表，添加参数，必须与 [(), (), ()] 中每一组 () 里面的数据，一一对应(个数、顺序完全吻合)
5. 修改 测试方法 内部实现，使用 参数（使用了测试数据）。
"""
import unittest
from parameterized import parameterized


def add(x, y):
    return x + y


# 通过函数，组织测试数据
def test_data():
    # 此处略去一些代码。代码功能将 其他格式的数据，转换成 [(),(),()] 格式的数据
    data = [(4, 1, 5), (16, 3, 19), (4, 9, 12), (6, 7, 13), (5, 11, 16)]
    return data         # 此函数，被调用时，返回 [(),(),()] 格式的数据


class TestAdd(unittest.TestCase):
    @parameterized.expand(test_data())  # 调用test_data()函数时，就能得到 [(),(),()] 格式的数据
    def test01_add(self, a, b, expect):
        res = add(a, b)
        self.assertEqual(expect, res)
